var modes=new Array("text/x-csrc","text/x-c++src","text/x-pascal","text/x-java","text/x-ruby","text/x-bash","text/x-python","text/x-php","text/x-perl","text/x-csharp","text/x-objectivec","text/x-vb","text/x-scheme","text/x-clang","text/x-clang++","text/x-lua","text/javascript","text/x-go","text/x-z80")
var languages=new Array("C","C++","Pascal","Java","Ruby","Bash","Python","PHP","Perl","C#","Obj-C","FreeBasic","Scheme","Clang","Clang++","Lua","JavaScript","Go","Other Language");
$(function(){
    var id=$("#pid").val();

    $.ajax({
        url: '/problem/getproblem?id='+id,
        async: true,
        type: 'GET',
        success: function (data) {

            $.ajax({
                url:'/solution/lastlanguage',
                async:true,
                type:'GET',
                success:function (data) {
                    if(data.ok==true){
                        $('.selectpicker').selectpicker('val', data.val);
                        editor.setOption("mode",modes[data.language]);
                    }

                }
            })
            var val=$('#language').val();
            $.ajax({
                url:'/solution/template',
                async:true,
                type:'POST',
                data:{
                    pid:id,
                    language:val,
                },
                success:function (data) {
                   if(data.ok==true){
                       editor.setValue(data.code);
                   }
                }
            })
            $("#title").html(data.problem.problemId+"."+data.problem.title);
            $("#limit").html("时间限制: "+data.problem.timeLimit+" Sec<br>"+"内存限制: "+data.problem.memoryLimit+" MB");
            $("#content").html(data.problem.description);
            $("#standard").html("输入:"+data.problem.input+"<br>"+"输出:"+data.problem.output);
            $("#sampleInput").html("<pre>"+data.problem.sampleInput+"</pre>");
            $("#sampleOutput").html("<pre>"+data.problem.sampleOutput+"</pre>")
            $("#test").val(data.problem.sampleInput);
        }
    });
    // $("#java").click(function(){
    //     $("#language").html('Java');
    //     $("#language").append("<span class='caret'></span>");
    //     editor.setOption("mode","text/x-java");
    // });
    // $("#c").click(function(){
    //     $("#language").html('C');
    //     $("#language").append("<span class='caret'></span>");
    //     editor.setOption("mode","text/x-csrc");
    // });
    // $("#c1").click(function(){
    //     $("#language").html('C++');
    //     $("#language").append("<span class='caret'></span>");
    //     editor.setOption("mode","text/x-c++src");
    // });
    // $("#python").click(function(){
    //     $("#language").html('Python');
    //     $("#language").append("<span class='caret'></span>");
    //     editor.setOption("mode","text/x-python");
    // });
    // $("#ruby").click(function(){
    //     $("#language").html('Ruby');
    //     $("#language").append("<span class='caret'></span>");
    //     editor.setOption("mode","text/x-ruby");
    // });
    // $("#go").click(function(){
    //     $("#language").text('Go');
    //     $("#language").append("<span class='caret'></span>");
    //     editor.setOption("mode","text/x-go");
    // });
    // $("#objc").click(function(){
    //     $("#language").html('Obj-C');
    //     $("#language").append("<span class='caret'></span>");
    //     editor.setOption("mode","text/x-objectivec");
    // });
    // $("#c2").click(function(){
    //     $("#language").html('C#');
    //     $("#language").append("<span class='caret'></span>");
    //     editor.setOption("mode","text/x-csharp");
    // });
    // $("#lua").click(function(){
    //     $("#language").html('Lua');
    //     $("#language").append("<span class='caret'></span>");
    // });
    // $("#js").click(function(){
    //     $("#language").html('JavaScript');
    //     $("#language").append("<span class='caret'></span>");
    //     editor.setOption("mode","text/javascript");
    // });$("#bash").click(function(){
    //     $("#language").html('Bash');
    //     $("#language").append("<span class='caret'></span>");
    // });
    // $("#php").click(function(){
    //     $("#language").html('PHP');
    //     $("#language").append("<span class='caret'></span>");
    //     editor.setOption("mode","text/x-php");
    // });
    // $("#freebasic").click(function(){
    //     $("#language").html('FreeBasic');
    //     $("#language").append("<span class='caret'></span>");
    // });
    // $("#perl").click(function(){
    //     $("#language").html('Perl');
    //     $("#language").append("<span class='caret'></span>");
    // });
    // $("#scheme").click(function(){
    //     $("#language").html('Scheme');
    //     $("#language").append("<span class='caret'></span>");
    // });
    // $("#clang").click(function(){
    //     $("#language").html('Clang');
    //     $("#language").append("<span class='caret'></span>");
    // });
    // $("#clang1").click(function(){
    //     $("#language").html('Clang++');
    //     $("#language").append("<span class='caret'></span>");
    // });
    // $("#pascal").click(function(){
    //     $("#language").html('Pascal');
    //     $("#language").append("<span class='caret'></span>");
    // });
    $("#clear").click(function(){
        // $("#code").val('');
        editor.setValue('');
       //console.log("256631");
    });

    $("#check").click(function(){

        if ( $("#check").is(":checked") ) {
            $("#testcase").removeClass("hidden");
        }
        else {
            $("#testcase").addClass("hidden");
            $("#test").val('');
        }
    });
    $("#lastcode").click(function(){

        var val=$('#language').val();

        $.ajax({
            url:'/solution/lastcode',
            async:true,
            type:'POST',
            data:{
                pid:id,
                language:val,
            },
            success:function (data) {
               if(data.ok===true){
                   editor.setValue(data.code.source);
               }
               else{
                   alert("您还没有用该语言提交过该题");
               }
            }
        })
    });
    $("[data-toggle='tooltip']").tooltip();
    $("#submit").click(function(){
        $("#submitloading").removeClass("hidden");
        $("#submit").addClass("disabled");
        $('#run').addClass("disabled");
        $("#submit").prop('disabled',true);
        $("#run").prop('disabled',true);
        var code=editor.getValue();

        var val=$('#language').val();
        $.ajax({
            url: '/solution/submit',
            async: true,
            type: 'POST',
            data:{
                language:val,
                code:code,
                problemId:id,
            },
            success: function (data) {
               if(data.ok==true){
                   var sid=data.sid;
                   setTimeout(getdata(sid,0),1000);
                   $("#myModal").modal({backdrop: "static", keyboard: false});
               }
               else{
                   alert("错误信息:"+data.msg);
                   $("#submit").removeClass("disabled");
                   $('#run').removeClass("disabled");
                   $("#submit").attr('disabled',false);
                   $("#run").attr('disabled',false);
               }
            }
        })
    });
    $("#run").click(function(){
        $("#submit").addClass("disabled");
        $('#run').addClass("disabled");
        $("#submit").prop('disabled',true);
        $("#run").prop('disabled',true);
        var code=editor.getValue();
        var val=$('#language').val();
        var test=$("#test").val();

        $("#selfinput").html("<pre>"+test+"</pre>");
        $.ajax({
            url: '/solution/submit',
            async: true,
            type: 'POST',
            data:{
                language:val,
                code:code,
                problemId:-id,
                input:test,
            },
            success: function (data) {
                if(data.ok==true){
                    setTimeout(getsampleanswer(data.sid,1),1000);
                    $("#result").html("Judging");
                    $("#result").css("color","#0088CC");
                    $("#deresult").removeClass("hidden");
                    $("#loading").removeClass("hidden");
                }
                else{
                    alert("错误信息:"+data.msg);
                    $("#submit").removeClass("disabled");
                    $('#run').removeClass("disabled");
                    $("#submit").attr('disabled',false);
                    $("#run").attr('disabled',false);
                }
            }
        })

    });

   $("#location").click(function () {
       window.location.replace("http://localhost:8080/tutorial/index");
   })
});
function getsampleanswer(sid,test) {
    $.ajax({
        url: '/solution/resultcallback',
        async: true,
        type: 'POST',
        data:{
            sid:sid,
            test:test,
        },
        success: function (data) {
            if(data.ok==true){
                switch (data.result){
                    case 11:{
                        $("#result").html("Compile Error");
                        $("#result").css("color","#D05451");
                        $("#selfanswer").html("<pre>"+data.info+"</pre>");
                        $("#morede").removeClass("hidden");
                        $("#loading").addClass("hidden");
                        $("#submit").removeClass("disabled");
                        $('#run').removeClass("disabled");
                        $("#submit").attr('disabled',false);
                        $("#run").attr('disabled',false);
                        break;
                    }
                    case 10:{
                        $("#result").html("Runtime Error");
                        $("#result").css("color","#D05451");
                        $("#selfanswer").html("<pre>"+data.info+"</pre>");
                        $("#morede").removeClass("hidden");
                        $("#loading").addClass("hidden");
                        $("#submit").removeClass("disabled");
                        $('#run').removeClass("disabled");
                        $("#submit").attr('disabled',false);
                        $("#run").attr('disabled',false);
                        break;
                    }
                    case 2:{
                        $("#result").html("Judging");
                        $("#result").css("color","#0088CC");
                        $("#deresult").removeClass("hidden");
                        $("#loading").removeClass("hidden");
                        setTimeout(getsampleanswer(sid,1),1000);
                        break;
                    }
                    case 3:{
                        $("#result").html("Judging");
                        $("#result").css("color","#0088CC");
                        $("#deresult").removeClass("hidden");
                        $("#loading").removeClass("hidden");
                        setTimeout(getsampleanswer(sid,1),1000);
                        break;
                    }
                    case 0:{
                        $("#result").html("Judging");
                        $("#result").css("color","#0088CC");
                        $("#deresult").removeClass("hidden");
                        $("#loading").removeClass("hidden");
                        setTimeout(getsampleanswer(sid,1),1000);
                        break;
                    }
                    case 1:{
                        $("#result").html("Judging");
                        $("#result").css("color","#0088CC");
                        $("#deresult").removeClass("hidden");
                        $("#loading").removeClass("hidden");
                        setTimeout(getsampleanswer(sid,1),1000);
                        break;
                    }
                    case 13:{
                        $("#result").html("Finished");
                        $("#result").css("color","#449D44");
                        $("#selfanswer").html("<pre>"+data.info+"</pre>");
                        $("#morede").removeClass("hidden");
                        $("#loading").addClass("hidden");
                        $("#submit").removeClass("disabled");
                        $('#run').removeClass("disabled");
                        $("#submit").attr('disabled',false);
                        $("#run").attr('disabled',false);
                        break;
                    }

                }


            }
            else {
                setTimeout(getsampleanswer(sid,1),1000);
            }

        }
    })
}
function getdata(sid,test) {
    $("#shut").addClass("hidden");
    $("#location").addClass("hidden");
    $("#shut").prop("disabled",true);
    $("#location").prop("disabled",true);
    $.ajax({
        url: '/solution/resultcallback',
        async: true,
        type: 'POST',
        data:{
            sid:sid,
            test:test,
        },
        success: function (data) {
            if(data.ok==true){
                switch (data.result){
                    case 0:{
                        $("#judgeresult").html("等待中");
                        $("#hiddenpanle").addClass("hidden");
                        $("#judgeresult").css("color","#0088CC");
                        setTimeout(getdata(sid,test),1000);
                        break;
                    }
                    case 1:{
                        $("#judgeresult").html("编译中");
                        $("#judgeresult").css("color","#0088CC");
                        setTimeout(getdata(sid,test),1000);
                        break;
                    }
                    case 2:{
                        $("#judgeresult").html("编译中");
                        $("#judgeresult").css("color","#0088CC");
                        $("#hiddenpanle").addClass("hidden");
                        setTimeout(getdata(sid,test),1000);
                        break;
                    }
                    case 3:{
                        $("#judgeresult").html("编译中");
                        $("#judgeresult").css("color","#0088CC");
                        $("#hiddenpanle").addClass("hidden");
                        setTimeout(getdata(sid,test),1000);
                        break;
                    }
                    case 12:{
                        $("#judgeresult").html("编译中");
                        $("#judgeresult").css("color","#0088CC");
                        $("#hiddenpanle").addClass("hidden");
                        setTimeout(getdata(sid,test),1000);
                        break;
                    }
                    case 13:{
                        $("#judgeresult").html("编译中");
                        $("#judgeresult").css("color","#0088CC");
                        $("#hiddenpanle").addClass("hidden");
                        setTimeout(getdata(sid,test),1000);

                        break;
                    }
                    case 4:{

                        $("#judgeresult").html("正确");
                        $("#hiddenpanle").addClass("hidden");
                        $("#submitloading").addClass("hidden");
                        $("#judgeresult").css("color","#449D44")
                        $("#submit").removeClass("disabled");
                        $('#run').removeClass("disabled");
                        $("#submit").attr('disabled',false);
                        $("#run").attr('disabled',false);
                        $("#shut").removeClass("hidden");
                        $("#location").removeClass("hidden");
                        $("#shut").attr("disabled",false);
                        $("#location").attr("disabled",false);
                        break;
                    }
                    case 11:{
                            $("#judgeresult").html("编译错误");
                            $("#judgeresult").css("color","#D05451");
                            $("#submitloading").addClass("hidden");
                            $.ajax({
                                url: '/solution/errorinfo',
                                async: true,
                                type: 'POST',
                                data:{
                                    sid:sid
                                },
                                success: function (data) {
                                    if(data.ok==true){
                                        $("#hiddenpanle").removeClass("hidden");
                                        $("#resultdetails").html(data.error.error);
                                        $("#submit").removeClass("disabled");
                                        $('#run').removeClass("disabled");
                                        $("#submit").attr('disabled',false);
                                        $("#run").attr('disabled',false);
                                        $("#shut").removeClass("hidden");
                                        $("#location").removeClass("hidden");
                                        $("#shut").attr("disabled",false);
                                        $("#location").attr("disabled",false);
                                    }

                                }
                            });
                        //setTimeout(getdata(sid,test),1000);
                        break;
                    }//编译错误,运行错误
                    case 10:{
                        $("#judgeresult").html("运行错误");
                        $("#judgeresult").css("color","#D05451");
                        $("#submitloading").addClass("hidden");
                        $.ajax({
                            url: '/solution/errorinfo',
                            async: true,
                            type: 'POST',
                            data:{
                                sid:sid
                            },
                            success: function (data) {
                                if(data.ok==true){
                                    $("#hiddenpanle").removeClass("hidden");
                                    $("#resultdetails").html(data.error.error);
                                    $("#submit").removeClass("disabled");
                                    $('#run').removeClass("disabled");
                                    $("#submit").attr('disabled',false);
                                    $("#run").attr('disabled',false);
                                    $("#shut").removeClass("hidden");
                                    $("#location").removeClass("hidden");
                                    $("#shut").attr("disabled",false);
                                    $("#location").attr("disabled",false);
                                }

                            }
                        });
                        break;
                    }
                    case 5:{
                        $("#judgeresult").html("格式错误");
                        $("#judgeresult").css("color","#D05451");
                        $("#submitloading").addClass("hidden");
                        $("#hiddenpanle").addClass("hidden");
                        $("#submit").removeClass("disabled");
                        $('#run').removeClass("disabled");
                        $("#submit").attr('disabled',false);
                        $("#run").attr('disabled',false);
                        $("#shut").removeClass("hidden");
                        $("#location").removeClass("hidden");
                        $("#shut").attr("disabled",false);
                        $("#location").attr("disabled",false);

                        break;
                    }
                    case 6:{
                        $("#judgeresult").html("答案错误");
                        $("#judgeresult").css("color","#D05451");
                        $("#submitloading").addClass("hidden");
                        $("#hiddenpanle").addClass("hidden");
                        $("#submit").removeClass("disabled");
                        $('#run').removeClass("disabled");
                        $("#submit").attr('disabled',false);
                        $("#run").attr('disabled',false);
                        $("#shut").removeClass("hidden");
                        $("#location").removeClass("hidden");
                        $("#shut").attr("disabled",false);
                        $("#location").attr("disabled",false);
                        break;
                    }
                    case 7:{
                        $("#judgeresult").html("时间超限");
                        $("#judgeresult").css("color","#D05451");
                        $("#submitloading").addClass("hidden");
                        $("#hiddenpanle").addClass("hidden");
                        $("#submit").removeClass("disabled");
                        $('#run').removeClass("disabled");
                        $("#submit").attr('disabled',false);
                        $("#run").attr('disabled',false);
                        $("#shut").removeClass("hidden");
                        $("#location").removeClass("hidden");
                        $("#shut").attr("disabled",false);
                        $("#location").attr("disabled",false);
                        break;
                    }
                    case 8:{
                        $("#judgeresult").html("内存超限");
                        $("#judgeresult").css("color","#D05451");
                        $("#submitloading").addClass("hidden");
                        $("#submit").removeClass("disabled");
                        $('#run').removeClass("disabled");
                        $("#submit").attr('disabled',false);
                        $("#run").attr('disabled',false);
                        $("#shut").removeClass("hidden");
                        $("#location").removeClass("hidden");
                        $("#shut").attr("disabled",false);
                        $("#location").attr("disabled",false);
                        break;
                    }
                    case 9:{
                        $("#judgeresult").html("输出超限");
                        $("#hiddenpanle").addClass("hidden");
                        $("#judgeresult").css("color","#D05451");
                        $("#submitloading").addClass("hidden");
                        $("#submit").removeClass("disabled");
                        $('#run').removeClass("disabled");
                        $("#submit").attr('disabled',false);
                        $("#run").attr('disabled',false);
                        $("#shut").removeClass("hidden");
                        $("#location").removeClass("hidden");
                        $("#shut").attr("disabled",false);
                        $("#location").attr("disabled",false);
                        break;
                    }
                }
            }
        }
    })
}




